/**
 * Ausatz Subklasse von Medium.
 * Alle Methoden mit setze...() weisen einer Variablen einen Wert zu.
 * Alle gib...(). Alle ...Hinzufuegen Methoden fuegen einen Wert einer 
 * Liste hinzu.
 * 
 * setzeEnthaltenIn () weisst der Variablen enthalteIn einen Wert zu 
 * z.B. das Buch in dem der Aufsatz enthalten ist.
 * gibEnthaltenIn() : String liefert den Wert der Variablen zurueck.
 * gibAutor() : Person lieftert den Autor des Aufsatzes zurueck.
 * setzeAutor (String) Speichert den Autor des Aufsatzes
 * 
 * Datei: Aufsatz.java         		Autor:Simon Schindelmann 
 * Datum: 05.11.11                 	Version: 0.1
 * 
 */

package medienverwaltung;

import java.util.*;
import personenverwaltung.Person;

public class Aufsatz extends Medium
{

  private static final long serialVersionUID = 2329079703757313463L;
  private Person autor;
  // Buch was den Aufsatz enthaelt 
  private String enthaltenIn;


  public Aufsatz (String titel, String datum, Abmessung abmessung)
      throws KeinDatumFormat
  {
    super (titel, datum, abmessung);
    initial = "AS";
  }


  public Aufsatz (String titel, String datum, Abmessung abmessung,
      String verlag, String ausgabe, String enthaltenIn, String autor)
      throws NameEnthaeltZahlenSonderzeichen, KeinDatumFormat
  {
    super (titel, datum, abmessung, verlag, ausgabe);
    this.enthaltenIn = enthaltenIn;
    autorenSetzen (autor);
    initial = "AS";
  }


  /**
   * Der String mit den Autorenn wird hier uebergeben. Der String wird 
   * voneiner Namenparser-Methode zerteilt und eine ArrayList wird 
   * zuruek geliefert. Die Enthaelt pro Namen ein Array. Das Array 
   * enthaelt jeden Teilnamen des kompletten Namens. Dann werden die 
   * namen in den Arrays bis zur vorletzten Stelle im String vorname 
   * gespeichert und der letzte Arraywert ist der Nachname der wird 
   * im String nachname gespeichert. Aus den beiden Strings kann dann 
   * ein Objekt Person erzeugt werden und der autorListe hinzugefuegt 
   * werden.
   * 
   * @param autoren hier wird ein String mit Autorennamen uebergeben.
   * @NameEnthaeltZahlen
   */
  private void autorenSetzen (String autoren)
      throws NameEnthaeltZahlenSonderzeichen
  {
    ArrayList<String[]> temp = new ArrayList<String[]> ();
    // ArrayList enthaelt die Namen der Autoren
    temp = NamenParser.parsen (autoren);
    // Speichert den Array mit dem Autoren Namen
    String[] buffer;
    Person p;
    
    
    for (int i = 0; i < temp.size (); i++)
    {
      buffer = temp.get (i);
      String vorname = "";
      String nachname = "";

      for (int j = 0; j < buffer.length; j++)
      {
        /*
         * Prueft ob es der vorletzte Arraywert ist falls ja wird 
         * dannach in den else Teil gegangen und der Nachname wird 
         * gespeichert.
         */
        if (j < (buffer.length - 1))
        {
          vorname = "" + buffer[j];
        }
        else
        {
          nachname = "" + buffer[j];
        }
      }
      System.out.println (vorname);
      System.out.println (nachname);
      p = new Person (vorname, nachname);
      autor = p;
    }
  }

  
  /**
   * Speichert den Namen des Autors.
   * @param name ist der Name des Autors.
   * @throws NameEnthaeltZahlenSonderzeichen 
   */
  public void setzeAutor (String name)
      throws NameEnthaeltZahlenSonderzeichen
  {
    autorenSetzen (name);
  }

  
  /**
   * Speichert dem Namen des Mediums in dem der Aufsatz enthalten ist.
   * @param enthaltenIn der Name des Mediums in dem der Aufsatz 
   * enthalten ist.
   */
  public void setzeEnthaltenIn (String enthaltenIn)
  {
    this.enthaltenIn = enthaltenIn;
  }


  /**
   * Gibt das Medium zurueck in dem der Aufsatz enthalten ist. 
   * @return das Medium in dem der Aufsatz enthalten ist.
   */
  public String gibEnhaltenIn ()
  {
    return enthaltenIn;
  }

  
  /**
   * Liefert den Autor des Aufsatzes zurueck.
   * @return gib das Objekt Person zurueck das den Vor- und Nachnamen
   * des Autors enthaelt.
   */
  public Person gibAutor ()
  {
    return autor;
  }
}
